Add 0014-Fix-hang-after-C-z-in-gnome-shell.patch.
authorRob Browning <rlb@defaultvalue.org>
Wed, 21 Mar 2012 05:40:02 +0000 (00:40 -0500)
committerRob Browning <rlb@defaultvalue.org>
Wed, 21 Mar 2012 05:40:06 +0000 (00:40 -0500)
Emacs should no longer hang when C-z is pressed within the Gnome
shell.  Thanks to Nikolay Pelov <npelov@gmail.com> for the report.

Closes: #655592
1  2 
debian/.git-dpm
debian/patches/0014-Fix-hang-after-C-z-in-gnome-shell.patch
debian/patches/series

diff --cc debian/.git-dpm
index 40aa8e6d4de005f830014ed52a8bb62ecd2a26ef,0000000000000000000000000000000000000000..91a1e8206c08548882eb45a6ef7b70e5ae8ee90b
mode 100644,000000..100644
--- /dev/null
@@@ -1,8 -1,0 +1,8 @@@
- 937769ea76b5787bb334678c8685692859128b66
- 937769ea76b5787bb334678c8685692859128b66
 +# see git-dpm(1) from git-dpm package
++847d5d949a989ad15308ab56ec8a9ec7fd2dc2d1
++847d5d949a989ad15308ab56ec8a9ec7fd2dc2d1
 +4edc7f7569f39278c30a9a64da6e0b313bbed458
 +4edc7f7569f39278c30a9a64da6e0b313bbed458
 +emacs23_23.4+1.orig.tar.bz2
 +155466351ad8e2e10af8a1f7f23af0a801cf7db2
 +23111569
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..840cbca8a61fd0f5b5aa628c9253f9163a6b8aa3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,196 @@@
++From 847d5d949a989ad15308ab56ec8a9ec7fd2dc2d1 Mon Sep 17 00:00:00 2001
++From: Jan D <jan.h.d@swipnet.se>
++Date: Sun, 30 Oct 2011 18:17:48 +0100
++Subject: Fix hang after C-z in gnome-shell.
++
++Emacs should no longer hang when C-z is pressed within the Gnome
++shell.
++
++Applied-By: Rob Browning <rlb@defaultvalue.org>
++Origin: upstream, commit: d3b65adf905c408aea986ff113cb3bc1b24d73e9
++Bug-Debian: http://bugs.debian.org/655592
++---
++ src/ChangeLog |   13 +++++++++++++
++ src/xterm.c   |   45 +++++++++++++++++++++++++++++++++------------
++ src/xterm.h   |    3 ++-
++ 3 files changed, 48 insertions(+), 13 deletions(-)
++
++diff --git a/src/ChangeLog b/src/ChangeLog
++index e44ec5f..e1f24d1 100644
++--- a/src/ChangeLog
+++++ b/src/ChangeLog
++@@ -90,6 +90,19 @@
++      (xmenu_show, xdialog_show): Use it in record_unwind_protect instead of
++      calling free_menubar_widget_value_tree directly (Bug#9830).
++ 
+++2011-10-30  Jan Djärv  <jan.h.d@swipnet.se>
+++
+++     * xterm.h (x_display_info): Add Xatom_net_wm_state_hidden (Bug#9893).
+++
+++     * xterm.c: Declare x_handle_net_wm_state to return int.
+++     (handle_one_xevent): Check if we are iconified but don't have
+++     _NET_WM_STATE_HIDDEN.  If do, treat as deiconify (Bug#9893).
+++     (get_current_wm_state): Return non-zero if not hidden,
+++     check for _NET_WM_STATE_HIDDEN (Bug#9893).
+++     (do_ewmh_fullscreen): Ignore return value from get_current_wm_state.
+++     (x_handle_net_wm_state): Return what get_current_wm_state returns.
+++     (x_term_init): Initialize dpyinfo->Xatom_net_wm_state_hidden.
+++
++ 2011-09-19  Andreas Schwab  <schwab@linux-m68k.org>
++ 
++      * keymap.c (Fsingle_key_description): Use make_specified_string
++diff --git a/src/xterm.c b/src/xterm.c
++index af8af50..866915a 100644
++--- a/src/xterm.c
+++++ b/src/xterm.c
++@@ -375,7 +375,7 @@ static void x_scroll_bar_report_motion P_ ((struct frame **, Lisp_Object *,
++                                          enum scroll_bar_part *,
++                                          Lisp_Object *, Lisp_Object *,
++                                          unsigned long *));
++-static void x_handle_net_wm_state P_ ((struct frame *, XPropertyEvent *));
+++static int x_handle_net_wm_state P_ ((struct frame *, XPropertyEvent *));
++ static void x_check_fullscreen P_ ((struct frame *));
++ static void x_check_expected_move P_ ((struct frame *, int, int));
++ static void x_sync_with_move P_ ((struct frame *, int, int, int));
++@@ -6148,7 +6148,19 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
++       last_user_time = event.xproperty.time;
++       f = x_top_window_to_frame (dpyinfo, event.xproperty.window);
++       if (f && event.xproperty.atom == dpyinfo->Xatom_net_wm_state)
++-        x_handle_net_wm_state (f, &event.xproperty);
+++        if (x_handle_net_wm_state (f, &event.xproperty) && f->iconified)
+++          {
+++            /* Gnome shell does not iconify us when C-z is pressed.  It hides
+++               the frame.  So if our state says we aren't hidden anymore,
+++               treat is as deiconfied.  */
+++            if (! f->async_iconified)
+++              SET_FRAME_GARBAGED (f);
+++            f->async_visible = 1;
+++            f->async_iconified = 0;
+++            f->output_data.x->has_been_visible = 1;
+++            inev.ie.kind = DEICONIFY_EVENT;
+++            XSETFRAME (inev.ie.frame_or_window, f);
+++          }
++ 
++       x_handle_property_notify (&event.xproperty);
++       xft_settings_event (dpyinfo, &event);
++@@ -8600,17 +8612,19 @@ x_set_sticky (f, new_value, old_value)
++ 
++ /* Return the current _NET_WM_STATE.
++    SIZE_STATE is set to one of the FULLSCREEN_* values.
++-   STICKY is set to 1 if the sticky state is set, 0 if not.  */
+++   STICKY is set to 1 if the sticky state is set, 0 if not.
++ 
++-static void
++-get_current_vm_state (struct frame *f,
+++   Return non-zero if we are not hidden, zero if we are.  */
+++
+++static int
+++get_current_wm_state (struct frame *f,
++                       Window window,
++                       int *size_state,
++                       int *sticky)
++ {
++   Atom actual_type;
++   unsigned long actual_size, bytes_remaining;
++-  int i, rc, actual_format;
+++  int i, rc, actual_format, is_hidden = 0;
++   struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
++   long max_len = 65536;
++   Display *dpy = FRAME_X_DISPLAY (f);
++@@ -8632,7 +8646,7 @@ get_current_vm_state (struct frame *f,
++       if (tmp_data) XFree (tmp_data);
++       x_uncatch_errors ();
++       UNBLOCK_INPUT;
++-      return;
+++      return ! f->iconified;
++     }
++ 
++   x_uncatch_errors ();
++@@ -8640,7 +8654,9 @@ get_current_vm_state (struct frame *f,
++   for (i = 0; i < actual_size; ++i)
++     {
++       Atom a = ((Atom*)tmp_data)[i];
++-      if (a == dpyinfo->Xatom_net_wm_state_maximized_horz) 
+++      if (a == dpyinfo->Xatom_net_wm_state_hidden)
+++        is_hidden = 1;
+++      else if (a == dpyinfo->Xatom_net_wm_state_maximized_horz)
++         {
++           if (*size_state == FULLSCREEN_HEIGHT)
++             *size_state = FULLSCREEN_MAXIMIZED;
++@@ -8662,6 +8678,7 @@ get_current_vm_state (struct frame *f,
++ 
++   if (tmp_data) XFree (tmp_data);
++   UNBLOCK_INPUT;
+++  return ! is_hidden;
++ }
++ 
++ /* Do fullscreen as specified in extended window manager hints */
++@@ -8674,7 +8691,7 @@ do_ewmh_fullscreen (f)
++   Lisp_Object lval = get_frame_param (f, Qfullscreen);
++   int cur, dummy;
++ 
++-  get_current_vm_state (f, FRAME_OUTER_WINDOW (f), &cur, &dummy);
+++  (void)get_current_wm_state (f, FRAME_OUTER_WINDOW (f), &cur, &dummy);
++ 
++   /* Some window managers don't say they support _NET_WM_STATE, but they do say
++      they support _NET_WM_STATE_FULLSCREEN.  Try that also.  */
++@@ -8748,7 +8765,7 @@ XTfullscreen_hook (f)
++ }
++ 
++ 
++-static void
+++static int
++ x_handle_net_wm_state (f, event)
++      struct frame *f;
++      XPropertyEvent *event;
++@@ -8756,8 +8773,8 @@ x_handle_net_wm_state (f, event)
++   int value = FULLSCREEN_NONE;
++   Lisp_Object lval;
++   int sticky = 0;
+++  int not_hidden = get_current_wm_state (f, event->window, &value, &sticky);
++ 
++-  get_current_vm_state (f, event->window, &value, &sticky);
++   lval = Qnil;
++   switch (value) 
++     {
++@@ -8777,6 +8794,8 @@ x_handle_net_wm_state (f, event)
++       
++   store_frame_param (f, Qfullscreen, lval);
++   store_frame_param (f, Qsticky, sticky ? Qt : Qnil);
+++
+++  return not_hidden;
++ }
++ 
++ /* Check if we need to resize the frame due to a fullscreen request.
++@@ -9514,7 +9533,7 @@ x_iconify_frame (f)
++   if (!NILP (type))
++     x_bitmap_icon (f, type);
++ 
++-#ifdef USE_GTK
+++#if defined (USE_GTK)
++   if (FRAME_GTK_OUTER_WIDGET (f))
++     {
++       if (! FRAME_VISIBLE_P (f))
++@@ -10545,6 +10564,8 @@ x_term_init (display_name, xrm_option, resource_name)
++     = XInternAtom (dpyinfo->display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
++   dpyinfo->Xatom_net_wm_state_sticky
++     = XInternAtom (dpyinfo->display, "_NET_WM_STATE_STICKY", False);
+++  dpyinfo->Xatom_net_wm_state_sticky
+++    = XInternAtom (dpyinfo->display, "_NET_WM_STATE_HIDDEN", False);
++   dpyinfo->Xatom_net_window_type
++     = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE", False);
++   dpyinfo->Xatom_net_window_type_tooltip
++diff --git a/src/xterm.h b/src/xterm.h
++index cdfe649..14fa687 100644
++--- a/src/xterm.h
+++++ b/src/xterm.h
++@@ -365,7 +365,8 @@ struct x_display_info
++   /* Atoms dealing with EWMH (i.e. _NET_...) */
++   Atom Xatom_net_wm_state, Xatom_net_wm_state_fullscreen_atom,
++     Xatom_net_wm_state_maximized_horz, Xatom_net_wm_state_maximized_vert,
++-    Xatom_net_wm_state_sticky, Xatom_net_frame_extents;
+++    Xatom_net_wm_state_sticky, Xatom_net_wm_state_hidden,
+++    Xatom_net_frame_extents;
++ 
++   /* XSettings atoms and windows.  */
++   Atom Xatom_xsettings_sel, Xatom_xsettings_prop, Xatom_xsettings_mgr;
index bc6e0903097a357acb21f59500347b517b2cff3c,0000000000000000000000000000000000000000..4a8121ade07b8eb7dbd5bb65de6fe9a3927e614e
mode 100644,000000..100644
--- /dev/null
@@@ -1,13 -1,0 +1,14 @@@
 +0001-Prefer-usr-share-info-emacs-23-over-usr-share-info.patch
 +0002-Run-debian-startup-and-set-debian-emacs-flavor.patch
 +0003-Remove-files-that-appear-to-be-incompatible-with-the.patch
 +0004-Adjust-documentation-references-for-Debian.patch
 +0005-Cause-the-build-to-fail-if-liblockfile-isn-t-selecte.patch
 +0006-Avoid-silently-losing-mail-via-fakemail.patch
 +0007-Modify-the-output-of-version-to-indicate-Debian-modi.patch
 +0008-Look-for-NEWS-in-order-to-find-etc-rather-than-GNU.patch
 +0009-Invoke-the-correct-xmlstarlet-executable-on-Debian-s.patch
 +0010-Fix-startup-hang-on-Debian-GNU-kFreeBSD.patch
 +0011-Use-CRT_DIR-to-find-crt-.o-on-ppc64.patch
 +0012-Define-POSIX_SIGNALS-for-GNU-Hurd.patch
 +0013-Add-a-printf-attribute-to-movemail.c-to-allow-harden.patch
++0014-Fix-hang-after-C-z-in-gnome-shell.patch